package handle

import (
	"encoding/json"
	"fmt"

	utilx "protocx/entity"
	"protocx/protobufx"

	"github.com/labstack/echo/v4"
)

type Resp struct {
}

func (r Resp) InitRoute(party *echo.Group) {
	p := party.Group("/resp")
	p.GET("/string", r.String())
	p.GET("/json", r.Json())
	p.GET("/jsonp", r.JSONP())
	p.GET("/xml", r.XML())
	p.GET("/html", r.HTML())
	p.GET("/file", r.FILE())
	p.GET("/blob", r.Blob())
}
func (r Resp) String() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		_, err := ctx.Response().Write([]byte("string"))
		if err != nil {
			return err
		}
		return nil
	}
}
func (r Resp) Json() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		fmt.Println("json")
		return ctx.JSON(200, utilx.Resp{
			Code: 200,
			Msg:  "",
			Data: nil,
		})
	}
}
func (r Resp) JSONP() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		return ctx.JSONP(200, "callback", &protobufx.LoginRequest{
			Code: 879,
		})
	}
}
func (r Resp) JSONPretty() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		return ctx.JSONPretty(200, &protobufx.LoginRequest{
			Code: 879,
		}, "//")
	}
}
func (r Resp) XML() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		return ctx.XML(200, utilx.Resp{
			Code: 200,
			Msg:  "",
			Data: nil,
		})
	}
}

func (r Resp) HTML() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		return ctx.HTML(200, "<h1>1</h1>")
	}
}
func (r Resp) FILE() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		return ctx.File("")
	}
}
func (r Resp) Blob() echo.HandlerFunc {
	return func(ctx echo.Context) error {
		marshal, _ := json.Marshal(utilx.Resp{
			Code: 12,
			Msg:  "msg",
			Data: nil,
		})
		return ctx.Blob(200, echo.MIMEApplicationJSON, marshal)
	}
}
